/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kn.cstf2.main.Server;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import kn.cstf2.global.Utils.CstF2Exception;
import kn.cstf2.global.db.Operations.OperacionesDB;
import kn.cstf2.login.Server.LoginDao;
import kn.cstf2.main.Bean.Joinusertransition;
import kn.cstf2.transition.Bean.TransitionBean;
import com.mx.kn.cstf2.dto.UsuarioDto;
import kn.mx.cstf2.sql.MainSql;


/**
 *
 * @author user1
 */
public class MainServer {


    OperacionesDB odb = new OperacionesDB();

    public ArrayList<TransitionBean> obtenerTransitionBeanArrayIdKnkey(UsuarioDto usuario) {

        //Joinusertransition joinusertransition = new Joinusertransition();
        ArrayList<TransitionBean> transitionBeanArray = new ArrayList<TransitionBean>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = MainSql.SELECCIONAR_IDyKNKEY;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(index++, usuario.getId());

            rs = ps.executeQuery();
            transitionBeanArray = AdaptadorMain.obtenerTransitionBeanArray(rs);
        } catch (SQLException ex) {
            
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return transitionBeanArray;
    }

    public ArrayList<TransitionBean> obtenerKnkeysandClientNames(UsuarioDto usuario) {
        ArrayList<TransitionBean> transitionBeanArray = new ArrayList<TransitionBean>();
        ArrayList<TransitionBean> knkeys = this.obtenerTransitionBeanArrayIdKnkey(usuario);
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = "(";
        int i = 0;

        for (i = 0; i < knkeys.size(); i++) {
            sentenciaSQL += "" + knkeys.get(i).getKnkey();
            if (i < knkeys.size() - 1) {
                sentenciaSQL += ",";
            }
        }

        sentenciaSQL += ") ";
        sentenciaSQL = "SELECT c.companyname||'-'||uc.customernum, uc.customernum "
                + "FROM c_users_vs_clientes uc "
                + "INNER JOIN t_clientes c ON c.knkey = uc.customernum "
                + "WHERE customernum in " + sentenciaSQL
                + "GROUP BY c.companyname||'-'||uc.customernum, uc.customernum "
                + "ORDER BY 1";

        try {
            conn = odb.obtenerConexion("db2");
            ps = conn.prepareStatement(sentenciaSQL);
            if (i != 0) {
                rs = ps.executeQuery();
                int counter = 0;
                while (rs.next()) {
                    TransitionBean temp = new TransitionBean();
                    temp.setStatus(rs.getString(1));
                    for (i = 0; i < knkeys.size(); i++) {
                        if (rs.getInt(2) == knkeys.get(i).getKnkey()) {
                            temp.setId(knkeys.get(i).getId());
                            temp.setKnkey(knkeys.get(i).getKnkey());
                        }
                    }
                    transitionBeanArray.add(temp);
                }
            }
        } catch (SQLException e) {
            
            throw new CstF2Exception("Error al obtener knkeys from clientes");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }

        return transitionBeanArray;
    }

    public ArrayList<TransitionBean> obtenerKnkeysFromClients(String username) {
        ArrayList<TransitionBean> transitionBeanArray = new ArrayList<TransitionBean>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = MainSql.SELECCIONAR_KNKEY;

        try {
            conn = odb.obtenerConexion("db2");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setString(1, "%" + username + "%");
            rs = ps.executeQuery();
            transitionBeanArray = AdaptadorMain.obtenerListaKnkeys(rs);
        } catch (SQLException e) {
            
            throw new CstF2Exception("Error al obtener knkeys from clientes");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }

        return transitionBeanArray;
    }
    
    public void updatedFalse(Integer knkey){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = MainSql.UPDATEFALSE;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(1, knkey);

            ps.executeUpdate();
        } catch (SQLException ex) {
            
            throw new CstF2Exception("Error al modificar el update desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
    }
    
    public void updatedFalse1(Integer knkey){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = MainSql.UPDATE1FALSE;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(1, knkey);

            ps.executeUpdate();
        } catch (SQLException ex) {
            
            throw new CstF2Exception("Error al modificar el update desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
    }
    
    public void updatedTrue(Integer knkey){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = MainSql.UPDATETRUE;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(1, knkey);

            ps.executeUpdate();
        } catch (SQLException ex) {
            
            throw new CstF2Exception("Error al modificar el update desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
    }
    
    public void updatedTrue1(Integer knkey){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = MainSql.UPDATE1TRUE;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(1, knkey);

            ps.executeUpdate();
        } catch (SQLException ex) {
            
            throw new CstF2Exception("Error al modificar el update desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
    }
}
